{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第三周作业 在Rental Listing Inquiries数据上练习xgboost参数调优\n",
    "数据说明： Rental Listing Inquiries数据集是Kaggle平台上的一个分类竞赛任务，需要根据公寓的特征来预测其受欢迎程度（用户感兴趣程度分为高、中、低三类）。其中房屋的特征x共有14维，响应值y为用户对该公寓的感兴趣程度。评价标准为logloss。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调整正则参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入必要的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "get_ipython().magic('matplotlib inline')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dpath = \"./data/\"\n",
    "train = pd.read_csv(dpath + \"RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(dpath + \"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop(['interest_level'], axis=1)\n",
    "x_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import log_loss\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "kfold = StratifiedKFold(n_splits=2, shuffle=True, random_state=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1, 1.5], 'reg_lambda': [0.5, 1]}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1, 1.5]\n",
    "reg_lambda = [0.5, 1]\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=645,\n",
    "        max_depth=4,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.4,\n",
    "        colsample_bytree=0.7,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=2, random_state=2, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.7, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=4, min_child_weight=1, missing=None, n_estimators=645,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.4),\n",
       "       fit_params=None, iid=True, n_jobs=-1,\n",
       "       param_grid={'reg_alpha': [1, 1.5], 'reg_lambda': [0.5, 1]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(x_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59690, std: 0.00080, params: {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  mean: -0.59681, std: 0.00114, params: {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  mean: -0.59667, std: 0.00102, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.59663, std: 0.00040, params: {'reg_alpha': 1.5, 'reg_lambda': 1}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       " -0.59663070656438477)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_, gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 2416.22820044,  1326.80638897,   960.82345605,  1021.34141743]),\n",
       " 'mean_score_time': array([ 11.97568488,  11.33164811,   7.89945173,   6.28435934]),\n",
       " 'mean_test_score': array([-0.59690078, -0.59680934, -0.59667364, -0.59663071]),\n",
       " 'mean_train_score': array([-0.44266355, -0.44540965, -0.44870953, -0.45066959]),\n",
       " 'param_reg_alpha': masked_array(data = [1 1 1.5 1.5],\n",
       "              mask = [False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [0.5 1 0.5 1],\n",
       "              mask = [False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1}],\n",
       " 'rank_test_score': array([4, 3, 2, 1]),\n",
       " 'split0_test_score': array([-0.59769905, -0.59794649, -0.59769058, -0.59702807]),\n",
       " 'split0_train_score': array([-0.4428593 , -0.44603475, -0.4491803 , -0.4512794 ]),\n",
       " 'split1_test_score': array([-0.59610246, -0.59567211, -0.59565662, -0.59623331]),\n",
       " 'split1_train_score': array([-0.4424678 , -0.44478456, -0.44823876, -0.45005979]),\n",
       " 'std_fit_time': array([  39.78827572,  355.30782235,   11.06413293,  157.509009  ]),\n",
       " 'std_score_time': array([ 4.005229  ,  3.18418217,  0.17601013,  0.00700033]),\n",
       " 'std_test_score': array([ 0.0007983 ,  0.00113719,  0.00101698,  0.00039738]),\n",
       " 'std_train_score': array([ 0.00019575,  0.00062509,  0.00047077,  0.0006098 ])}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.596631 using {'reg_alpha': 1.5, 'reg_lambda': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv(dpath + 'my_preds_reg_alpha_reg_lambda_1.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc6cce48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig(dpath + 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
